package com.house.utils;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;


/**
 * 文件上传工具类
 * @author GGP
 */
public class FileTools {

	/**
	 * 封装上传单个文件
	 *
	 * @param file
	 * @return
	 */
	public static String uploadFile(MultipartFile file, HttpServletRequest request) {
		String url=null;
		//	原文件名
		String filename = file.getOriginalFilename();
		//	设置新的文件名
		String newFileName = fileRename(filename);
		try {
			File upFile = new File(Constant.SAVE_PATH + Constant.RELATIVE_PATH, newFileName);
			url = "http://"+InetAddress.getLocalHost().getHostAddress()+":"+request.getServerPort()+Constant.RELATIVE_PATH+newFileName;
			//	判断有没有这个文件
			if (!upFile.exists()) {
				//	没有就创建
				upFile.mkdirs();
			}
			file.transferTo(upFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return url;
	}

	/**
	 * 封装上传多个文件
	 *
	 * @param file
	 * @return
	 */
	public static List<String> uploadMoreFile(List<MultipartFile> file,HttpServletRequest request) {
		 List<String> paths=new ArrayList<>();
		for (MultipartFile f : file) {
			try {
				//	原文件名
				String filename = f.getOriginalFilename();
				//	设置新的文件名
				String newFileName = fileRename(filename);
				String url=url = "http://"+InetAddress.getLocalHost().getHostAddress()+":"+request.getServerPort()+Constant.RELATIVE_PATH+newFileName;
				paths.add(url);
				File filePath = new File(Constant.SAVE_PATH + Constant.RELATIVE_PATH, newFileName);
				if (!filePath.exists()) {
					filePath.mkdirs();
				}
				//上传
				f.transferTo(filePath);
			} catch (Exception e) {
				e.printStackTrace();
				return null;
			}
		}
		return paths;
	}

	/**
	 * 获取文件的类型
	 *
	 * @param fileName
	 * @return
	 */
	public static String getFileType(String fileName) {
		if (fileName == null) {
			throw new NullPointerException();
		}
		return fileName.substring(fileName.lastIndexOf("."));
	}

	/**
	 * 通过uuid给文件重命名
	 *
	 * @param fileName
	 * @return
	 */
	public static String fileRename(String fileName) {
		if (fileName == null||"".equals(fileName)) {
			throw new NullPointerException();
		}
		return UUID.randomUUID() + getFileType(fileName);
	}

	/**
	 * 检查文件类型
	 * @param file
	 * @return
	 */
	public static boolean checkImg(MultipartFile file){
		return checkImg(file.getOriginalFilename());
	}

	/**
	 * 检查文件列表类型
	 * @param files
	 * @return
	 */
	public static boolean checkImgList(List<MultipartFile> files){
		for (MultipartFile file : files) {
			return checkImg(file.getOriginalFilename());
		}
		return false;
	}

	/**
	 * 通过名称判断文件类型
	 * @param fileName
	 * @return
	 */
	private static boolean checkImg(String fileName){
		String[] fileTypes=new String[]{".jpg",".jpeg",".png",".gif",".bmp",".tiff",".ai",".cdr",".eps",".jfif"};
		String fileType = getFileType(fileName);
		for (String type : fileTypes) {
			if (type.equals(fileType)){
				return true;
			}
		}
		return false;
	}

	/**
	 * 用于判断有无文件
	 *
	 * @param file
	 * @return
	 */
	public static boolean hasFile(MultipartFile file) {
		return Objects.nonNull(file) && !file.isEmpty();
	}

}
